const puppeteer = require('puppeteer');
const fs = require('fs');
const path = require('path');

(async () => {
  try {
    // 创建临时 HTML 文件
    const htmlContent = `
      <!DOCTYPE html>
      <html>
      <head>
        <meta charset="utf-8">
        <title>HiPrint Test</title>
        <!-- 引入 HiPrint 库 -->
        <script src="./assets/jquery.js"></script>
        <script src="./assets/vue-plugin-hiprint.js"></script>
        <link href="./assets/print-lock.css" rel="stylesheet" />
      </head>
      <body>
        <div id="print-container">
          <h1>测试打印内容</h1>
          <p>这是一个使用 HiPrint 和 Puppeteer 的测试</p>
        </div>
        
        <script>
          // 等待 HiPrint 加载完成
          document.addEventListener('DOMContentLoaded', function() {
            // 初始化 HiPrint
            const designer = new hiprint.PrintDesigner({
              el: '#print-container',
              template: {
                content: '#print-container',
                pageSetup: {
                  orientation: 'portrait',
                  unit: 'mm',
                  size: 'A4'
                }
              }
            });
            
            // 定义一个全局函数，供 Puppeteer 调用
            window.executeHiPrint = function() {
              return new Promise((resolve, reject) => {
                try {
                  // 执行打印预览（在无头模式下会生成 PDF）
                  designer.preview({
                    printer: {
                      // 指定为 PDF 打印
                      name: 'PDF',
                      options: {
                        margin: '1cm',
                        printBackground: true
                      }
                    },
                    success: () => resolve('打印成功'),
                    error: (err) => reject(err)
                  });
                } catch (e) {
                  reject(e);
                }
              });
            };
          });
        </script>
      </body>
      </html>
    `;
    
    // 写入临时文件
    const tempFilePath = path.join(__dirname, 'temp-print-page.html');
    fs.writeFileSync(tempFilePath, htmlContent, 'utf8');
    
    // 启动浏览器
    const browser = await puppeteer.launch({
      headless: 'new', // 使用新的无头模式
      args: ['--no-sandbox', '--disable-setuid-sandbox']
    });
    
    // 打开新页面
    const page = await browser.newPage();
    
    // 设置页面视口
    await page.setViewport({ width: 1200, height: 800 });
    
    // 导航到临时 HTML 文件
    await page.goto(`file://${tempFilePath}`, { waitUntil: 'networkidle0' });
    
    // 等待 HiPrint 初始化完成
    await page.waitForFunction(() => window.hiprint !== undefined);
    
    // 执行 HiPrint 打印操作
    const result = await page.evaluate(async () => {
      try {
        return await window.executeHiPrint();
      } catch (error) {
        return `错误: ${error.message}`;
      }
    });
    
    console.log('打印结果:', result);
    
    // 保存为 PDF
    await page.pdf({
      path: 'output.pdf',
      format: 'A4',
      margin: { top: '1cm', right: '1cm', bottom: '1cm', left: '1cm' },
      printBackground: true
    });
    
    // 关闭浏览器
    await browser.close();
    
    // 删除临时文件
    fs.unlinkSync(tempFilePath);
    
    console.log('PDF 已生成: output.pdf');
  } catch (error) {
    console.error('执行过程中出错:', error);
  }
})();